﻿<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<script type="text/javascript" src="jfx.js"></script>
<script type="text/javascript">
	with(JFx){
		// Объявление схемы данных
		// пока реализовано только объявление имен элементов
		var ProjectDoc = Schema(
			Item("Projects"), // Первым элементом схемы указывается корневой элемент
			Item("Project",
				Attr("name", 0) // Обязательный атрибут. Передается в указаном элементе списка аргументов
			),
			Item("Description"),
			Item("Task", Attr("name", 0))
		);
		
		//%%% В перспективе хорошо бы реализовать более продробное описание структуры с возможностью валидации,
		//%%% например, так:
		//%%%
		//%%% var ProjectDoc = Schema(
		//%%% 	Item("Projects", Child("Project", [0,"*"])),
		//%%% 	Item("Project",
		//%%% 		Attr("name", 0), // Обязательный атрибут. Передается в указаном элементе списка аргументов
		//%%% 		Attr("rating"), // Необязательный атрибут. Передается во вложенной структуре
		//%%% 		Child("Description", {min:0, max:1}), // Дочерний элемент с указанием минимального и максимального числа
		//%%% 		Child("Task", {min:0, max:"*"})
		//%%% 	),
		//%%% 	Item("Description"),
		//%%% 	Item("Task", Child("Description", [0, "*"])),
		//%%% 	Item("Rating")
		//%%% );
	}
	
	with(ProjectDoc){ // объявляем, что будем использовать заданную схему данных. Ее элементами являются функции-конструкторы элементов с соответствующими именами
		var data = Projects(
			Project(
				"stroi", // обязательный атрибут name. Передается первым элементом списка (см. схему элемента Project)
				Description("Портал Строительный мир"),
				{rating:"11"}, // структура содержит произвольный набор необязательных атрибутов. Таких структур может быть несколько, и расположены они могут быть в произвольных местах списка
				Task("Описание структуры БД",
					ID("task1"), // используется встроенная в модуль функция назначения объекту уникального идентификатора (производится проверка уникальности).
					Description("Подготовить UML-диаграммы")
				),
				Task("Консультации операторов"),
				Task("Консультации пользователей")
			),
			Project("micc"),
			Project("Quartz", Description("Библиотека для преобразования структур данных на основе шаблонов, описанных в функциональном стиле."))
		);
		console.log("data: ", data);
		console.log("data._.$jxml(): ", data._.$jxml());
	}
</script>
</head>
<body>
	<h1>Тест описания JFx</h1>
	<p>Модуль JFx предназначен для создания структур данных javascript, подобных структуре XML-документа (т.е. узлы имеют атрибуты и дочерние узлы). При этом, описание схемы данных, и создание самой структуры производится в функциональном стиле, т.е иерархическая структура документа образуется путем иерархического вызова функций, имя которых является аналогом имени тега в XML.</p>
	<p>В данную тестовую страничку встроен скрипт с примером использования модуля JFx. Результаты работы выводятся в консоль Firebug.</p>
	
	<div style="color:blue">
		<p>Что планируется:</p>
		<ol>
			<li>более выразительный язык описания схемы данных с возможностью валидации</li>
			<li>предложить способ описания отношений (типизованных) между элементами для формирования неиерархических связей, и поиска по ним. Возможное решение - представление отношений в виде обычных элементов структуры, содержащих идентификатор целевого элемента, с созданием индекса элементов по признаку наличия этого отношения.</li>
		</ol>
	</div>
</body>
</html>